package com.littleHan.brushQuestions.web.specificTopic.dao;

import com.littleHan.brushQuestions.web.specificTopic.pojo.vo.CommentVo;
import com.littleHan.brushQuestions.web.start.pojo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;


public interface SpecificTopicDao {

    Topic getTopicInfo(String id);

    /**
     * 根据id在user表里获得信息
     * @param id 主键
     * @return 用户实例
     */
    User getUserById(String id);

    /**
     * 根据id获取普通用户的昵称
     * @param id 普通用户id
     * @return 普通用户实例
     */
    GeneralUser getGeneralUserInfoByIdAndRole(String id);

    /**
     * 获取身份名称列表
     * @param userId 用户id
     * @return
     */
    List<Role> getRoleName(String userId);

    /**
     * 根据id获取其题目的难度，类型，学科
     * @param id 数据字典中的id
     * @return 名称
     */
    String getDiffTypeObj(String id);

    /**
     * 根据用户id查看收藏题目表里是否收藏该题
     * @param userId 用户id
     * @param topicId 题目id
     * @return 条数
     */
    int checkIsCollectTopic(@Param("userId") String userId, @Param("topicId") String topicId);

    /**
     * 根据用户id取消收藏题目
     * @param userId 用户id
     * @param topicId 题目id
     * @return
     */
    int cancelCollect(@Param("userId")String userId, @Param("topicId") String topicId);

    /**
     * 根据用户id收藏题目
     * @param topicCollect 收藏题目实例
     * @return
     */
    int collectTopic(TopicCollect topicCollect);

    /**
     * 获取当前题目的评论
     * @param topicId 题号
     * @param pageNo 第几个开始
     * @param pageSize 显示几个
     * @return
     */
    List<CommentVo> getCommentListOrderByTime(@Param("topicId")String topicId, @Param("pageNo")int pageNo, @Param("pageSize")int pageSize);

    /**
     * 检查当前评论是否是当前用户的评论
     * @param id 评论id
     * @param userId 用户id
     * @return
     */
    int isUserComment(@Param("id")String id, @Param("userId")String userId);
    /**
     * 获取当前这道题的评论数量
     * @param topicId 题号
     * @return
     */
    int getCommentNum(String topicId);

    /**
     * 用户评论
     * @param comment 评论对象
     * @return
     */
    int userComment(Comment comment);

    /**
     * 用户删除自己的评论
     * @param id 评论id
     * @param userId 用户id
     * @return
     */
    int deleteUserComment(@Param("id")String id, @Param("userId")String userId);
}
